// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Code generated by sidekick. DO NOT EDIT.

/// A dyn-compatible, crate-private version of [super::DatasetService].
#[async_trait::async_trait]
pub trait DatasetService: std::fmt::Debug + Send + Sync {
    async fn get_dataset(
        &self,
        req: crate::model::GetDatasetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Dataset>>;

    async fn insert_dataset(
        &self,
        req: crate::model::InsertDatasetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Dataset>>;

    async fn patch_dataset(
        &self,
        req: crate::model::UpdateOrPatchDatasetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Dataset>>;

    async fn update_dataset(
        &self,
        req: crate::model::UpdateOrPatchDatasetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Dataset>>;

    async fn delete_dataset(
        &self,
        req: crate::model::DeleteDatasetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn list_datasets(
        &self,
        req: crate::model::ListDatasetsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::DatasetList>>;

    async fn undelete_dataset(
        &self,
        req: crate::model::UndeleteDatasetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Dataset>>;
}

/// All implementations of [super::DatasetService] also implement [DatasetService].
#[async_trait::async_trait]
impl<T: super::DatasetService> DatasetService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn get_dataset(
        &self,
        req: crate::model::GetDatasetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Dataset>> {
        T::get_dataset(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn insert_dataset(
        &self,
        req: crate::model::InsertDatasetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Dataset>> {
        T::insert_dataset(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn patch_dataset(
        &self,
        req: crate::model::UpdateOrPatchDatasetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Dataset>> {
        T::patch_dataset(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_dataset(
        &self,
        req: crate::model::UpdateOrPatchDatasetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Dataset>> {
        T::update_dataset(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_dataset(
        &self,
        req: crate::model::DeleteDatasetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_dataset(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_datasets(
        &self,
        req: crate::model::ListDatasetsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::DatasetList>> {
        T::list_datasets(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn undelete_dataset(
        &self,
        req: crate::model::UndeleteDatasetRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Dataset>> {
        T::undelete_dataset(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::JobService].
#[async_trait::async_trait]
pub trait JobService: std::fmt::Debug + Send + Sync {
    async fn cancel_job(
        &self,
        req: crate::model::CancelJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::JobCancelResponse>>;

    async fn get_job(
        &self,
        req: crate::model::GetJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Job>>;

    async fn insert_job(
        &self,
        req: crate::model::InsertJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Job>>;

    async fn delete_job(
        &self,
        req: crate::model::DeleteJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn list_jobs(
        &self,
        req: crate::model::ListJobsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::JobList>>;

    async fn get_query_results(
        &self,
        req: crate::model::GetQueryResultsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::GetQueryResultsResponse>>;

    async fn query(
        &self,
        req: crate::model::PostQueryRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QueryResponse>>;
}

/// All implementations of [super::JobService] also implement [JobService].
#[async_trait::async_trait]
impl<T: super::JobService> JobService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn cancel_job(
        &self,
        req: crate::model::CancelJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::JobCancelResponse>> {
        T::cancel_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_job(
        &self,
        req: crate::model::GetJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Job>> {
        T::get_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn insert_job(
        &self,
        req: crate::model::InsertJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Job>> {
        T::insert_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_job(
        &self,
        req: crate::model::DeleteJobRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_job(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_jobs(
        &self,
        req: crate::model::ListJobsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::JobList>> {
        T::list_jobs(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_query_results(
        &self,
        req: crate::model::GetQueryResultsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::GetQueryResultsResponse>> {
        T::get_query_results(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn query(
        &self,
        req: crate::model::PostQueryRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::QueryResponse>> {
        T::query(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::ModelService].
#[async_trait::async_trait]
pub trait ModelService: std::fmt::Debug + Send + Sync {
    async fn get_model(
        &self,
        req: crate::model::GetModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Model>>;

    async fn list_models(
        &self,
        req: crate::model::ListModelsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListModelsResponse>>;

    async fn patch_model(
        &self,
        req: crate::model::PatchModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Model>>;

    async fn delete_model(
        &self,
        req: crate::model::DeleteModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;
}

/// All implementations of [super::ModelService] also implement [ModelService].
#[async_trait::async_trait]
impl<T: super::ModelService> ModelService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn get_model(
        &self,
        req: crate::model::GetModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Model>> {
        T::get_model(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_models(
        &self,
        req: crate::model::ListModelsRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListModelsResponse>> {
        T::list_models(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn patch_model(
        &self,
        req: crate::model::PatchModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Model>> {
        T::patch_model(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_model(
        &self,
        req: crate::model::DeleteModelRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_model(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::ProjectService].
#[async_trait::async_trait]
pub trait ProjectService: std::fmt::Debug + Send + Sync {
    async fn get_service_account(
        &self,
        req: crate::model::GetServiceAccountRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::GetServiceAccountResponse>>;
}

/// All implementations of [super::ProjectService] also implement [ProjectService].
#[async_trait::async_trait]
impl<T: super::ProjectService> ProjectService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn get_service_account(
        &self,
        req: crate::model::GetServiceAccountRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::GetServiceAccountResponse>> {
        T::get_service_account(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::RoutineService].
#[async_trait::async_trait]
pub trait RoutineService: std::fmt::Debug + Send + Sync {
    async fn get_routine(
        &self,
        req: crate::model::GetRoutineRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Routine>>;

    async fn insert_routine(
        &self,
        req: crate::model::InsertRoutineRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Routine>>;

    async fn update_routine(
        &self,
        req: crate::model::UpdateRoutineRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Routine>>;

    async fn delete_routine(
        &self,
        req: crate::model::DeleteRoutineRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn list_routines(
        &self,
        req: crate::model::ListRoutinesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListRoutinesResponse>>;
}

/// All implementations of [super::RoutineService] also implement [RoutineService].
#[async_trait::async_trait]
impl<T: super::RoutineService> RoutineService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn get_routine(
        &self,
        req: crate::model::GetRoutineRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Routine>> {
        T::get_routine(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn insert_routine(
        &self,
        req: crate::model::InsertRoutineRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Routine>> {
        T::insert_routine(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_routine(
        &self,
        req: crate::model::UpdateRoutineRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Routine>> {
        T::update_routine(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_routine(
        &self,
        req: crate::model::DeleteRoutineRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_routine(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_routines(
        &self,
        req: crate::model::ListRoutinesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListRoutinesResponse>> {
        T::list_routines(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::RowAccessPolicyService].
#[async_trait::async_trait]
pub trait RowAccessPolicyService: std::fmt::Debug + Send + Sync {
    async fn list_row_access_policies(
        &self,
        req: crate::model::ListRowAccessPoliciesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListRowAccessPoliciesResponse>>;

    async fn get_row_access_policy(
        &self,
        req: crate::model::GetRowAccessPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::RowAccessPolicy>>;

    async fn create_row_access_policy(
        &self,
        req: crate::model::CreateRowAccessPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::RowAccessPolicy>>;

    async fn update_row_access_policy(
        &self,
        req: crate::model::UpdateRowAccessPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::RowAccessPolicy>>;

    async fn delete_row_access_policy(
        &self,
        req: crate::model::DeleteRowAccessPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn batch_delete_row_access_policies(
        &self,
        req: crate::model::BatchDeleteRowAccessPoliciesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;
}

/// All implementations of [super::RowAccessPolicyService] also implement [RowAccessPolicyService].
#[async_trait::async_trait]
impl<T: super::RowAccessPolicyService> RowAccessPolicyService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn list_row_access_policies(
        &self,
        req: crate::model::ListRowAccessPoliciesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::ListRowAccessPoliciesResponse>> {
        T::list_row_access_policies(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn get_row_access_policy(
        &self,
        req: crate::model::GetRowAccessPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::RowAccessPolicy>> {
        T::get_row_access_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn create_row_access_policy(
        &self,
        req: crate::model::CreateRowAccessPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::RowAccessPolicy>> {
        T::create_row_access_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_row_access_policy(
        &self,
        req: crate::model::UpdateRowAccessPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::RowAccessPolicy>> {
        T::update_row_access_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_row_access_policy(
        &self,
        req: crate::model::DeleteRowAccessPolicyRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_row_access_policy(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn batch_delete_row_access_policies(
        &self,
        req: crate::model::BatchDeleteRowAccessPoliciesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::batch_delete_row_access_policies(self, req, options).await
    }
}

/// A dyn-compatible, crate-private version of [super::TableService].
#[async_trait::async_trait]
pub trait TableService: std::fmt::Debug + Send + Sync {
    async fn get_table(
        &self,
        req: crate::model::GetTableRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Table>>;

    async fn insert_table(
        &self,
        req: crate::model::InsertTableRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Table>>;

    async fn patch_table(
        &self,
        req: crate::model::UpdateOrPatchTableRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Table>>;

    async fn update_table(
        &self,
        req: crate::model::UpdateOrPatchTableRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Table>>;

    async fn delete_table(
        &self,
        req: crate::model::DeleteTableRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>>;

    async fn list_tables(
        &self,
        req: crate::model::ListTablesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::TableList>>;
}

/// All implementations of [super::TableService] also implement [TableService].
#[async_trait::async_trait]
impl<T: super::TableService> TableService for T {
    /// Forwards the call to the implementation provided by `T`.
    async fn get_table(
        &self,
        req: crate::model::GetTableRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Table>> {
        T::get_table(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn insert_table(
        &self,
        req: crate::model::InsertTableRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Table>> {
        T::insert_table(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn patch_table(
        &self,
        req: crate::model::UpdateOrPatchTableRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Table>> {
        T::patch_table(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn update_table(
        &self,
        req: crate::model::UpdateOrPatchTableRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::Table>> {
        T::update_table(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn delete_table(
        &self,
        req: crate::model::DeleteTableRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<()>> {
        T::delete_table(self, req, options).await
    }

    /// Forwards the call to the implementation provided by `T`.
    async fn list_tables(
        &self,
        req: crate::model::ListTablesRequest,
        options: gax::options::RequestOptions,
    ) -> crate::Result<gax::response::Response<crate::model::TableList>> {
        T::list_tables(self, req, options).await
    }
}
